package com.bnz.user.service.impl;

import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.SecureUtil;
import com.bnz.user.entity.User;
import com.bnz.user.mapper.UserMapper;
import com.bnz.user.service.IUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 * 用户表 服务实现类
 * </p>
 *
 * @author zfs
 * @since 2022-12-02
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
    //引入redis
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private RabbitTemplate rabbitTemplate;
    //发送手机验证码
    @Override
    public void sendCode(String phone) {
        //使用hutu工具中的随机值产生
        String s = RandomUtil.randomNumbers(4);
        System.out.println("sss"+s);
        //讲生成 的4位随机数放入redis中
        redisTemplate.opsForValue().set(phone,s);
//        /定义要发送的map数据
        Map<String,String> mapData = new HashMap<>();
        mapData.put("phone",phone);
        mapData.put("code",s);
        //发送消息给rabbitmq
        //发送给我们的mq   --参数队列名字
        System.out.println("mapData = " + mapData);
        rabbitTemplate.convertAndSend("validcode",mapData);
        System.out.println("发送信息成功！");

    }
    //验证码验证方法
    @Override
    public boolean isValidCodeSuccess(String phone, String code) {
        //拿到验证码
        String validCode = redisTemplate.opsForValue().get(phone);
        //判断比较
        return code.equals(validCode);
    }

    /**
     * 用户的添加   --- 使用md5 将密码进行加密，存放到数据库
     * @param user
     */
    @Override
    public void add(User user) {
        //将密码进行md5加密码后再重新设置回用户
        String password = user.getPassword();
        user.setPassword(SecureUtil.md5(password));
        //保存到数据库中
        this.save(user);
    }

    @Override
    public User findById(Long id) {
        return null;
    }
}
